﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using Demo1.NCondition;

namespace Demo1
{


    public class Player
    {

        //public MapHandle _MapHandle;
        public double _X = 0;
        public double _Y = 0;

        public int _ID;

        public List<NCondition.JobInfo> ProcessList = new List<NCondition.JobInfo>();

        public List<int> _QuestInfo = new List<int>();
        //public List<int> _DestroyProcessList = new List<int>();

        public Player(int ID)
        {
            _ID = ID;
            // 풀레이어당 맵오브젝트 하나를 생성했다
            //_MapHandle = MapManager.I.Create();
        }

        public void AddProcess(IEnumerable pProcess, int id)
        {
            JobInfo pP = new JobInfo(id);
            pP.m_ProcessEnum = pProcess.GetEnumerator();

            ProcessList.Add(pP);

        }

        public void Update()
        {

            // 등록된 enumerable 오브젝트를 가지고 있다.
            // for 문중 ProcessList 에 있는 아이템을 지울수있는 구조를 위에 뒤에서 앞으로 for 문을 돈다.(성능은 좋지않다)
            
            for (int index = ProcessList.Count - 1; index >= 0; index--)
            {
                JobInfo pProcess = ProcessList[index];

                // 현재 스크립트용 함수에서 yield return new icondition 류가 있는지 본다.
                if (pProcess.m_Condition != null)
                {
                    // yield return new icondition 이 있으면 완료가 될때까지 스킵한다.
                    if (pProcess.m_Condition.IsComplete() == false)
                    {// 선행작업이 완료되지 않았다.
                        continue;
                    }
                }

                // yield 나 yield return 이 올때까지 프로세스가 진행된다.
                if (pProcess.m_ProcessEnum.MoveNext() == true)
                {
                    // 유저가 요정한 yield return new icondition 을 저장한다.

                    pProcess.m_Condition = (ICondition)pProcess.m_ProcessEnum.Current;
                    continue;
                }
                else
                {
                    // enumerable 문을 다 완료하였다면 지운다.
                    ProcessList.Remove(pProcess);
                }
            }

        }

    }
}
